home *** CD-ROM | disk | FTP | other *** search
- Path: abcfd20.larc.nasa.gov!amiga-request
- From: amiga-request@abcfd20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
- Subject: v90i270: ezlib - a library of functions; make programming easier, Part02/02
- Reply-To: nick@chopin.uucp (Dominic Giampaolo)
- Newsgroups: comp.sources.amiga
- Message-ID: <comp.sources.amiga:v90i270@abcfd20.larc.nasa.gov>
- References: <comp.sources.amiga:v90i269@abcfd20.larc.nasa.gov>
- Date: 10 Oct 90 01:00:08 GMT
- Approved: tadguy@uunet.UU.NET (Tad Guy)
- X-Mail-Submissions-To: amiga@uunet.uu.net
- X-Post-Discussions-To: comp.sys.amiga
-
- Submitted-by: nick@chopin.uucp (Dominic Giampaolo)
- Posting-number: Volume 90, Issue 270
- Archive-name: libraries/ezlib/part02
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 2 (of 2)."
- # Contents: Demo.uu doc/README ez.lib.uu src/demo.c src/getstring.c
- # src/screen.c
- # Wrapped by tadguy@abcfd20 on Tue Oct 9 20:59:52 1990
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'Demo.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Demo.uu'\"
- else
- echo shar: Extracting \"'Demo.uu'\" \(12809 characters\)
- sed "s/^X//" >'Demo.uu' <<'END_OF_FILE'
- Xbegin 644 Demo
- XM```#\P`````````#``````````(```AK````;@````$```/I```(:T[Z%Z1.-
- XM5?_H0JW__$*M__A"K?_T0JW_[$*M_^A(>``#3KH2V%A/2H!F*$AZ`O).NA<T;
- XM6$\O`$AZ`MQ.NAZ&+P!.NAZ<3^\`#$AX``I.NAR,6$](>``#2'D``(``3KH/9
- XM6%!/*T#__$JM__QF#DZZ%BY(>``*3KH<9%A/0J="IT*G0J<@;?_\2&@`+$ZZ8
- XM'[Q/[P`42'@`"4*G2'@`#TAX``$@;?_\2&@`+$ZZ'YY/[P`40J=(>``/2'@`B
- XM#TAX``(@;?_\2&@`+$ZZ'X!/[P`40J=(>``'2'@`#TAX``,@;?_\2&@`+$ZZ<
- XM'V)/[P`42'@`#D*G2'@`!TAX``0@;?_\2&@`+$ZZ'T1/[P`40J=(>``/0J=(?
- XM>``%(&W__$AH`"Q.NA\H3^\`%$AX__](>/__0J="IR\M__Q.N@Y23^\`%"M`,
- XM__A*K?_X9A@O+?_\3KH1/%A/3KH52$AX``I.NAM^6$](>/__2'H!PB\M__A.1
- XMNB`<3^\`#"!M__@K:``R__!(>``,2'H!MTZZ!=)03RM`_^Q*K?_L9PXO+?_LP
- XM+RW_\$ZZ'IA03TAZ`;=(>@&>+RW__$ZZ`VA/[P`,*T#_Z$JM_^AG9$AX`"A("
- XM>`"@+RW_\$ZZ'D9/[P`,2'H!JDZZ%8A83R\`2'H!DB\M__!.NAYN3^\`#"\M;
- XM_^A.NA5L6$\O`"\M_^@O+?_P3KH>4D_O``PO+?_H3KH54%A/4H`O`"\M_^A._
- XMNAT<4$\O+?_P3KH"#%A/2'@`*TAZ`5A(>`"O2'@`TB\M__A.N@H.3^\`%"M`1
- XM__1(>`"62'@`R"\M__!.NAVX3^\`#$AZ`5Q.NA3Z6$\O`$AZ`3,O+?_P3KH=T
- XMX$_O``Q(>`"J2'@`OB\M__!.NAV(3^\`#$AZ`6A.NA3*6$\O`$AZ`3TO+?_P&
- XM3KH=L$_O``P@;?_X+R@`5DZZ'-A83TAZ`5TO+?_X3KH%IE!/2JW_[&<*+RW_F
- XM[$ZZ'.I83TJM__1G#B\M__0O+?_X3KH)[%!/+RW_^$ZZ#$!83R\M__Q.N@^*$
- XM6$].NA.60J=.NAG.6$].74YU;F\@;&EB<S\*`&YO(&QI8G,_"@!%>DQI8B!$?
- XM96UO(%!R;V=R86T`=&]R;VYT;RYF;VYT`$5N=&5R(&$@<W1R:6YG(&AE<F4ZG
- XM`%1H:7,@:7,@82!D969A=6QT('-T<FEN9P!9;W4@='EP960@.@!9;W4@='EPH
- XM960@.@!$;VXG="!H879E(&$@8V]W(&1U9&4A`$5Z;&EB(&UA:V5S('!R;V=RA
- XM86UM:6YG(&9U;BX`17IL:6(@;6%K97,@<')O9W)A;6UI;F<@9G5N+@!#;&EC,
- XM:R!T:&4@8VQO<V4@9V%D9V5T('1O(&5X:70`0VQI8VL@=&AE(&-L;W-E(&=A0
- XM9&=E="!T;R!E>&ET`$)O>2!T:&ES('-U<F4@:7,@;F5A="!H=6@_`$Y5__PK3
- XM?````"C__"\M__Q(>``*+RT`"$ZZ&\1/[P`,(#P```#(D*W__"\`2'@";"\MJ
- XM``A.NAM@3^\`#'(0("W__$ZZ%]XO`"\M``A.NANB4$]2K?_\#*T```"@__QM.
- XMK"M\````%/_\+RW__$AX``HO+0`(3KH;:$_O``PO+?_\2'@";"\M``A.NAL,4
- XM3^\`#$AX``I(>``*+RW__$AX`38O+0`(3KH;`D_O`!1R$"`M__Q.NA=N+P`O\
- XM+0`(3KH;,E!/4JW__`RM````,O_\;9A.74YU("!/2R``0V%N8V5L``!.5?XZ7
- XM0JW^_"M\`````?Y"*WP`!`)`_CXK?``",`[^.DJM`!!G$"\M`!!(;?\!3KH22
- XM"E!/8`1"+?\!0>W^;$/L@.YP"B#94<C__$'M_IA#[("N<`H@V5'(__Q![?[$0
- XM0^R`2G`*(-E1R/_\0>W^2$/L@`)P""#94<C__$'M_D@K2/[F0>W^F"M(_FQ!7
- XM[?[$*TC^F#M\`5_^DCM\`6#^OCM\`6'^ZD'M_P$K2/Y(2'@`-TAX`3Q(>``N]
- XM2'@`E"\M_CXO+?XZ+RT`"$ZZ!VA/[P`<*T#^^$JM_OAF!G``3EU.=4AX__\OZ
- XM+0`,+RW^^$ZZ&X)/[P`,0J=(>``#2'@``4AM_FPO+?[X3KH:GD_O`!1"IR\MO
- XM_OA(;?YL3KH;'$_O``Q*K?Y"9P`!""!M_O@B:`!6<``0*0`/<@'AH2\!3KH9F
- XM+EA/2JW^0F<``.(@;?[X+R@`5DZZ&.183RM`_O1G``#,(&W^]"`H`!1@``"61
- XM(&W^]"MH`!S^\"!M_O!P`#`H`"9@3D*M_D)@6D*M_D)(;?\!3KH0N%A/4H`[$
- XM0/Y&T``?Y&9SY"IW``,"W^1B\`3KH83E!/*T#^_$JM_OQG)$AM_P$O+?[\)
- XM3KH0<E!/8!1@$I"\```!7V>J4X!GK%.`9ZA@[&`X0J<O+?[X2&W^Q$ZZ&9!/J
- XM[P`,8"1"K?Y"8!Y@')"\````0&<`_V20O````<!GYI"\``/^`&?*8.(O+?[TF
- XM3KH8.EA/8`#_&F``_O0O+?[X3KH9PEA/("W^_&``_IY.5?_B0?H`]BM(_^1"X
- XM+?_C#*P```!D@4ID$D*G2'H`Y$ZZ%^903RE`@4I@!AM\``'_XTJL@4IF!G``0
- XM3EU.=2\M``A.N@_&6$]<@"M`__!"IR\M__!.NA=H4$\K0/_L2JW_[&8$<`!@8
- XMTB\M``@O+?_L3KH/B%!/2'@`+B\M_^Q.N@]:4$\K0/_H2JW_Z&<2+RW_Y"\M$
- XM_^A.N@^$4$]*@&<.+RW_Y"\M_^Q.NA,N4$\K;?_L__0[;0`.__A"+?_Z&WP`P
- XM`O_[2&W_]$ZZ&7I83RM`__PO+?_P+RW_[$ZZ%PA03THM_^-F#B\L@4I.NA;"W
- XM6$]"K(%*("W__&``_T`N9F]N=`!D:7-K9F]N="YL:6)R87)Y``!.5?_L#*T`X
- XM``!D``AB!G``3EU.=4AY``$``$AX`#Q.NA:*4$\K0/_T2JW_]&8$<`!@WB!MD
- XM__31_````!0K2/_P(&W_]-'\````*"M(_^P@;?_L$7P``0`!(&W_\!%\``$`:
- XM`2!M__01?``!``$@;?_L$7P``0`"(&W_\!%\``$``B!M__01?``!``(@;?_TT
- XM,7P`"@`$(&W_]#%\``P`!B!M__0A;0`,``P@;?_P,7P``P`&(&W_\#%\``,`^
- XM!"!M__!#^@"*(4D`#"!M_^PQ?``#``8@;?_L,7P``P`$(&W_[$/Z`&\A20`,Q
- XM+RW_]$ZZ%]!83]"\````,BM`__@,K0```);_^&P(*WP```#A__A(>``Z+RW_3
- XM^$*G0J<O+?_L+RW_\"\M__0O+0`(3KH70$_O`"`K0/_\2'@`/"\M__1.NA60J
- XM4$\@+?_\8`#^QB!/2R``($-!3D-%3```3E7_[$*M__Q"K?_X0JW_]`@M``$`A
- XM$V<&<`!.74YU""T````39@8`;0```!)(>0`!``!(>``L3KH5&%!/*T#__$AYZ
- XM``$``$AX`!1.NA4$4$\K0/_X2'D``0``2'@`$$ZZ%/!03RM`__1*K?_T9Q1"Y
- XMITAX`!1.NA3:4$\@;?_T(4``"$JM__QG%DJM__AG$$JM__1G"B!M__1*J``(B
- XM9EY*K?_\9PY(>``L+RW__$ZZ%,A03TJM__AG#DAX`!0O+?_X3KH4M%!/2JW_@
- XM]&<J(&W_]$JH``AG$DAX`!0@;?_T+R@`"$ZZ%))03TAX`!`O+?_T3KH4A%!/6
- XM<`!@`/\@(&W__#%M``H`!"!M__PQ;0`.``8@;?_\,6T`$@`,(&W__#%M`!8`=
- XM#B!M__PQ;0`>`"8@;?_\,7P``0`0(&W__"%M__@`&B!M__PA;?_T`!(@;?_X$
- XM$+P``B!M__A"*``"(&W_^#%\``H`!"!M__@Q?``#``8@;?_X(6T`&``,(&W_Y
- XM]#"\__\@;?_T,7S__P`"(&W_]!%\``$`!"!M__1"*``%(&W_]$(H``8@;?_T\
- XM$7P`!0`'+RW_^$ZZ%:Y83]"\````%BM`__`,K0```![_\&P(*WP````>__`@H
- XM;(%"(F@`FG``,"D`%%R`*T#_["!M__0B:``(0E$@;?_T(F@`"$)I``(@;?_T&
- XM(F@`"#-M__(`!"!M__0B:``(0FD`!B!M__0B:``(,VW_\@`((&W_]")H``@S:
- XM;?_N``H@;?_T(F@`"$)I``P@;?_T(F@`"#-M_^X`#B!M__0B:``(0FD`$"!MT
- XM__0B:``(0FD`$B`M__!3@"!M__PQ0``(("W_[%.`(&W__#%```H@+?_\8`#]%
- XMD$Y5__A";?_^.WP``?_\<``P+0`:+P`O+0`4<``P+?_\+P!P`#`M__XO`#`M<
- XM`!)(P"\`,"T`#DC`+P!.NOTX3^\`&"M`__A*K?_X9@9P`$Y=3G5(>0``__\O&
- XM+?_X+RT`"$ZZ$_A/[P`,2'@``4*G+RT`""\M__A.NA283^\`$"`M__A@RDY59
- XM__PO+0`,+RT`"$ZZ%)903T*G+RT`""!M``@O*``^3KH45D_O``Q(>``4(&T`L
- XM#")H`!(O*0`(3KH2+%!/2'@`$"!M``PO*``23KH2&E!/2'@`%"!M``PO*``:P
- XM3KH2"%!/2'@`+"\M``Q.NA'Z4$].74YU3E7_]$JL@4)G!DJL@49F%$AX``-.Y
- XMN@686$]*@&8&<`!.74YU2'D``0``2'@`,$ZZ$9Q03RM`__A*K?_X9@1P`>`
- XM2JT`'&P.(&R!0G``,"@`VBM``!Q*K0`@;`@K?```!=P`("!M__@A;0`,``X@$
- XM;?_X(6T`$``*(&W_^#"M`!8@;?_X,6T`'@`$(&W_^#%M`!H``B!M__@Q;0`B)
- XM``8@;?_X,7P`/``F(&W_^#%\`!X`*"!M__@1?`#_``@@;?_X$7P`_P`)(&W_-
- XM^#%\``$`+B!M__@A;0`(`!Y*K0`(9V0@;?_X,7P`#P`N("T`%-"M`!P@;0`(3
- XM,B@`#$C!L(%O%B!M``@P*``,2,"0K0`4(&W_^#%```0@+0`8T*T`("!M``@RY
- XM*``.2,&P@6\6(&T`"#`H``Y(P)"M`!@@;?_X,4``!F!@("T`%-"M`!P@;(%"1
- XM<@`R*`#:L(%C%B!L@4)P`#`H`-J0K0`4(&W_^#%```1A5E*`(&R!0G(`,B@`O
- XMV$ZZ#Y@K0/_\("T`&-"M`""PK?_\;Q`@+?_\D*T`&"!M__@Q0``&+RW_^$ZZY
- XM$DY83RM`__1(>``P+RW_^$ZZ$#903R`M__1@`/Y:3E7_&$AX`.A(;?\83KH14
- XM^E!/2BW_T6<&<`%.74YU<`!@^$Y5``!(YP`P)&T`"+7\````9&0(3-\,`$Y=R
- XM3G5*J@`<9P@O"DZZ$9Q83TJJ`%9G&B\J`%9.N@_F6$\F0$J`9PHO"TZZ#_Q8[
- XM3V#@+PI.NA&,6$]@P$Y5```O+0`8+RT`%"\M`!`O+0`,+RR!&B\L@1XO+0`(C
- XM3KK]H$_O`!Q.74YU3E7_W$CG#``H+0`(*BT`#$JL@4)G!DJL@49F&$AX``-.8
- XMN@,B6$]*@&8*<`!,WP`P3EU.=4'M_]Q#[($B<`<@V5'(__P[1/_H"`0`#V<&&
- XM.WP"@/_@"`0``F<0(&R!0C`H`-CC0#M`_^)@"B!L@4([:`#8_^*ZO`````1O9
- XM"`@$``]G`GH$2H5N`GH!"`0`"V<(>@8[?`%`_^`(!``'9PAZ!CM\`4#_X+J\P
- XM````!F\">@8[1?_DNKP````";RXP+?_B2,`O`#`M_^!(P"\`+P5A2$_O``PKI
- XM0/_X2JW_^&8&<`!@`/]*".T`!O_K2&W_W$ZZ$))83RM`__Q*K?_\9Q*ZO```W
- XM``)O"B!M__PA;?_X`5(@+?_\8`#_%DY5```O"@RM````"``(;PAP`"1?3EU.@
- XM=4AY``$``$AX`"A.N@XF4$\D0"`*9@1P`@+RT`$"\M``PO+0`(+PI.N@[T=
- XM3^\`$"\M`!`O+0`,+PIA$$_O``Q*@&8$<`!@LB`*8*Y.50``2.<,("1M``@Z5
- XM*@`"RM)X`&```)`O+0`0+RT`#$ZZ#DY03R($Y8$@0='*(4``""`$Y8`@0-'*\
- XM2J@`"&8X2'H`ETZZ!>Q83R\`2'H`:$ZZ#3XO`$ZZ#51/[P`,+RT`$"\M``POB
- XM"DZZ`))/[P`,3-\$,$Y=3G5(>``!<@@@+0`,3KH*?"(M`!!.N@RF+P`@!.6`N
- XM($#1RB\H``A.N@W@3^\`#%*$<``0*@`%N(!E`/]H<`%@NDYO(&UE;2!F;W(@0
- XM0FET36%P(&1A=&$N("!%>&ET:6YG+@H`3F\@;65M(&9O<B!":71-87`@9&%TN
- XM82X@($5X:71I;F<N"@!.50``2.<(("1M``AX`&`>+RT`$"\M``P@!.6`($#1V
- XMRB\H``A.N@V>3^\`#%*$(`3E@"!`T<I*J``(9PIP`!`J``6X@&7*2'@`*"\*B
- XM3KH,PE!/<`!,WP003EU.=4Y5__A(YP`P)&T`")?+M?P```!D9`A,WPP`3EU.W
- XM=4JJ``1G#$AX`#).N@OL6$]@[@PJ``(`O6,8)FH!4C`J``Q(P"M`__PP*@`.5
- XM2,`K0/_X+PI.N@XF6$\@"V<2+RW_^"\M__PO"TZZ_SQ/[P`,8*9.50``2.<,_
- XM`"@M``AZ``@$``!G,D*G2'H!7DZZ#$Q03RE`@4)F($AZ`75.N@0^6$\O`$AZ1
- XM`5-.N@N0+P!.N@NF3^\`#'H!"`0``6<R0J=(>@%C3KH,%%!/*4"!1F8@2'H!9
- XM?$ZZ!`983R\`2'H!64ZZ"U@O`$ZZ"VY/[P`,>@$(!``"9S1(>``B2'H!:4ZZ?
- XM"]I03RE`@4YF($AZ`8U.N@/,6$\O`$AZ`5E.N@L>+P!.N@LT3^\`#'H!"`0`3
- XM`V<R0J=(>@&-3KH+HE!/*4"!2F8@2'H!O$ZZ`Y183R\`2'H!@DZZ"N8O`$ZZ+
- XM"OQ/[P`,>@$(!``$9S)"ITAZ`<).N@MJ4$\I0(%29B!(>@'U3KH#7%A/+P!(]
- XM>@&Y3KH*KB\`3KH*Q$_O``QZ`0@$``AG,D*G2'H!_4ZZ"S)03RE`@59F($AZ`
- XM`C!.N@,D6$\O`$AZ`?1.N@IV+P!.N@J,3^\`#'H!2H5G#DZZ`CQP`$S?`#!.K
- XM74YU<`%@]&=R87!H:6-S+FQI8G)A<GD`3F\@1W)A<&AI8W,N;&EB<F%R>2X*"
- XM`$YO($=R87!H:6-S+FQI8G)A<GDN"@!I;G1U:71I;VXN;&EB<F%R>0!.;R!)5
- XM;G1U:71I;VXN;&EB<F%R>2X*`$YO($EN='5I=&EO;BYL:6)R87)Y+@H`87)P3
- XM+FQI8G)A<GD`3F\@07)P+FQI8G)A<GD@:6X@>6]U<B!,24)3(&1I<F5C=&]RR
- XM>2X*`$YO($%R<"YL:6)R87)Y(&EN('EO=7(@3$E"4R!D:7)E8W1O<GDN"@!D5
- XM:7-K9F]N="YL:6)R87)Y`$YO($1I<VMF;VYT+FQI8G)A<GD@:6X@>6]U<B!,U
- XM24)3.B!D:7)E8W1O<GDN"@!.;R!$:7-K9F]N="YL:6)R87)Y(&EN('EO=7(@-
- XM3$E"4SH@9&ER96-T;W)Y+@H`=')A;G-L871O<BYL:6)R87)Y`$YO(%1R86YSC
- XM;&%T;W(N;&EB<F%R>2!I;B!Y;W5R($Q)0E,Z(&1I<F5C=&]R>2X*`$YO(%1R_
- XM86YS;&%T;W(N;&EB<F%R>2!I;B!Y;W5R($Q)0E,Z(&1I<F5C=&]R>2X*`')EU
- XM>'AS>7-L:6(N;&EB<F%R>0!.;R!R97AX<WES;&EB+FQI8G)A<GD@:6X@>6]UZ
- XM<B!,24)3.B!D:7)E8W1O<GDN"@!.;R!R97AX<WES;&EB+FQI8G)A<GD@:6X@7
- XM>6]U<B!,24)3.B!D:7)E8W1O<GDN"@!.50``#*P```!D@4IC#B\L@4I.N@A8)
- XM6$]"K(%*#*P```!D@4YC#B\L@4Y.N@A`6$]"K(%.#*P```!D@49C#B\L@49.>
- XMN@@H6$]"K(%*P```!D@4)C#B\L@4).N@@06$]"K(%"#*P```!D@5)C#B\LG
- XM@5).N@?X6$]"K(%2#*P```!D@59C#B\L@59.N@?@6$]"K(%63EU.=2!O``0B6
- XM2$H89OQ3B!`O``NSR&<(L"!F^"`(3G5P`$YU(&\`!"`((F\`"!#99OQ.=2!O8
- XM``0@"$H89OR1P"`(4X!.=3`\?_]@!#`O``Y30&L4(&\`!")O``BQ"68,4TA*)
- XM&%?(__9P`$YU8P1P`4YU</].=6%P0^R!9D7L@6:UR68.,CP`%&L(=``BPE')$
- XM__PI3X%F+'@`!"E.@6I(YX"`""X`!`$I9Q!+^@`(3J[_XF`&0J?S7TYS0_H`W
- XM($ZN_F@I0(%N9@PN/``#@`=.KO^48`1.N@`:4$].=61O<RYL:6)R87)Y`$GYB
- XM``!__DYU3E4``"\*2'D``0``,"R!6L'\``8O`$ZZ!N0I0(%R4$]F%$*G2'D`8
- XM`0``3KH&I%!/+FR!9DYU(&R!<D)H``0@;(%R,7P``0`0(&R!<C%\``$`"B!L#
- XM@68@+(%FD*@`!%"`*4"!=B!L@78@O$U!3EA"ITZZ!I@D0$JJ`*Q83V<P+RT`&
- XM#"\M``@O"DZZ`+(I?`````&!>B!L@7(`:(````0@;(%R`&B````*3^\`#&!",
- XM2&H`7$ZZ!L)(:@!<3KH&>BE`@7X@;(%^2J@`)%!/9Q`@;(%^(F@`)"\13KH%9
- XMFEA/+RR!?B\*3KH">"EL@7Z!@E!/3KH%FB!L@7(@@$ZZ!:H@;(%R(4``!F<6L
- XM2'@#[4AZ`"Q.N@6"(&R!<B%```Q03R\L@8(O+(&&3KKFO$*G3KH#C$_O``PD0
- XM7TY=3G4J`$Y5``!(YPPP)&T`$"!M``A*J`"L9Q@@;0`(("@`K.6`*``@1"`H:
- XM`!#E@"9`8`0F;(%<$!-(@$C`T*T`#%2`*4"!BD*G+RR!BDZZ!78I0(&.4$]F!
- XM"$S?##!.74YU$!-(@$C`*@`O!2!+4H@O""\L@8Y.N@&.(&R!CM'%0_H!6!#9;
- XM9OPO+0`,+PHO+(&.3KH!3B!L@8Y",%@`*7P````!@88@;(&.T<4F2%*+)$M/0
- XM[P`8$!-(@$C`*@"PO````"!G(+J\````"6<8NKP````,9Q"ZO`````UG"+J\6
- XM````"F8$4HM@S`P3`"!M``",#!,`(F8R4HL@2U*+$!!(@$C`*@!G("!*4HH0J
- XMA;J\````(F80#!,`(F8$4HM@!D(J__]@`F#28$0@2U*+$!!(@$C`*@!G,+J\2
- XM````(&<HNKP````)9R"ZO`````QG&+J\````#6<0NKP````*9P@@2E**$(5@:
- XMPB!*4HI"$$J%9@)3BU*L@89@`/\\0A)"IR`L@892@.6`+P!.N@0Z*4"!@E!/6
- XM9@A"K(&&8`#^OGH`)FR!CF`>(`7E@"!L@8(ABP@`($L@"$H89OR1P%.(4HC79
- XMR%*%NJR!AFW<(`7E@"!L@8)"L`@`8`#^@B``,#Q__V`$,"\`#B!O``1*&&;\Z
- XM4T@B;P`(4T`0V5?(__QG`D(0("\`!$YU3.\#```$(`@B+P`,8`(0V5?)__QGO
- XM!E)!8`)"&%')__Q.=4Y5``!(YPXP)&T`"$*G2'H`CDZZ`]0I0(&24$]F"$S?B
- XM#'!.74YU(&T`#")H`"0O*0`$3KH$W"@`6$]G4DAZ`&T@1"\H`#9.N@2N)D!*'
- XM@%!/9S1(>`/M+PM.N@+<+`!03V<D(`;E@"H`($4E:``(`*0E1@"<2'@#[4AZL
- XM`#A.N@*X)4``H%!/+P1.N@1Z6$\O+(&23KH"]D*L@9)83V"`:6-O;BYL:6)RT
- XM87)Y`%=)3D1/5P`J`$CG2`!"A$J`:@1$@%)$2H%J!D2!"D0``6$^2D1G`D2`&
- XM3-\`$DJ`3G5(YT@`0H1*@&H$1(!21$J!:@)$@6$:(`%@V"\!81(@`2(?2H!.&
- XM=2\!808B'TJ`3G5(YS``2$%*068@2$$V`30`0D!(0(##(@!(0#("@L,P`4)!K
- XM2$%,WP`,3G5(028!(@!"04A!2$!"0'0/T(#3@;:!8@22@U)`4<K_\DS?``Q.G
- XM=4Y5``!*K(&69P8@;(&63I`O+0`(3KH`"%A/3EU.=4Y5__PO!"MM``C__$JL^
- XM@7)G+'@`8`HO!$ZZ`/Q83U*$,"R!6DC`N(!M[#`L@5K!_``&+P`O+(%R3KH"M
- XM$%!/2JR!FF<&(&R!FDZ02JR!8&<*+RR!8$ZZ`8!83TJL@9YG""!L@9X@K(&B$
- XM2JR!IF<*+RR!IDZZ`:!83TJL@:IG"B\L@:I.N@&06$]*K(&N9PHO+(&N3KH!A
- XM@%A/2JR!LF<*+RR!LDZZ`7!83RQX``0(+@`$`2EG%"\-2_H`"DZN_^(J7V`&-
- XM0J?S7TYS2JR!?F8J2JR!CF<B+RR!BB\L@8Y.N@%L("R!AE*`Y8`O`"\L@8).Y
- XMN@%:3^\`$&`.3KH!1"\L@7Y.N@&`6$\@+?_\+FR!9DYU*!].74YU3E4``$CG[
- XM#B`H+0`(<@8@!$ZZ`$0D0-7L@7)*A&T.,"R!6DC`N(!L!$J29A(I?`````*!W
- XMMG#_3-\$<$Y=3G4P*@`$P'R``&8(+Q).N@`N6$]"DG``8.!(YW``-`'$P"8!;
- XM2$/&P$A#0D/4@TA`P,%(0$)`T(),WP`.3G4B+P`$+&R!;D[N_]PB+P`$+&R!Z
- XM;D[N_X(B+P`$+&R!;D[N_SHL;(%N3N[_RDSO``8`!"QL@6Y.[O_B3OH``BQL3
- XM@6Y.[O_$3OH``B(O``0L;(%N3N[_ID[Z``),[P`.``0L;(%N3N[_T$CG`01,>
- XM[R"```PL;(%J3J[_E$S?((!.=4[Z``(B;P`$+&R!:D[N_F).^@`"3.\``P`$%
- XM+&R!:D[N_SHB;P`$+&R!:D[N_MHL;(%J3N[_?$[Z``(B;P`$("\`""QL@6I.E
- XM[O\N3OH``B!O``0L;(%J3N[^C$[Z``(L;(%J(F\`!"`O``A.[OW83OH``B)OF
- XM``0L;(%J3N[^AB`O``0L;(%J3N[^PD[Z``(@;P`$+&R!:D[N_H!,[P`#``0LA
- XM;(%"3N[^%")O``1,[P`#``@L;(%"3N[^U")O``0L;(%"3N[_LB)O``1,[P`#Q
- XM``@L;(%"3N[_"B)O``1,[P`/``@L;(%"3N[_3"!O``1,[P`#``@L;(%"3N[^?
- XM#B!O``1,[P`'``@L;(%"3N[^>B)O``1,[P`#``@L;(%"3N[_$")O``0@+P`(G
- XM+&R!0D[N_JHB;P`$(&\`""QL@4).[O^^(&\`!$SO``\`""QL@4).[O[@(F\`J
- XM!"!O``@@+P`,+&R!0B\'3J[_Q"X?3G5,[P,```0L;(&23N[_H"!O``0L;(&2<
- XM3N[_IB!O``0L;(&23N[_LB\*3.\'```(+&R!1DZN_C(D7TYU3.\#```$("\`Q
- XM#"QL@49.[O_6+PI,[P,```A,[P0#`!`L;(%&3J[^2B1?3G5(YP`P3.\/```,K
- XM3.\`#P`<+&R!1DZN_J1,WPP`3G4@;P`$+&R!1D[N_\H@;P`$+&R!1D[N_[X@?
- XM;P`$+&R!1D[N_[@@;P`$("\`""QL@49.[O]\(&\`!"QL@49.[OZV(&\`!"QL2
- XM@49.[O\Z(&\`!"QL@49.[O\T+PI,[P<```@L;(%&3J[_(B1?3G4O"DSO!P``=
- XM""`O`!0L;(%&3J[^4"1?3G5,[P,```0L;(%&3N[_'"\*3.\'```(+&R!1DZNP
- XM_NPD7TYU(&\`!"QL@4I.[O_B``````/L`````0````$``!@:`````````_(`;
- XM``/J````60``````````````_P``````````````````````````````````%
- XM```!)````20`"P````L`````__[__@,```4````D````````````#0`2`2,`)
- XM"@```($`!````#@```````````````````````````````````!+````2P`+H
- XM````"P````#_____`P``!0```'0``````P`````*``$````````%#```````B
- XM`````.8`*`!*``H````!``$```"(`````````)@```````````````````,`'
- XM````"@`!````````!1(````````````*`"@`2@`*`````0`!````B```````R
- XM``#8``````````````````````(```(0#P`````!0`#(``$``0```0\`````6
- XM`````````````````````````````````````````````````!0`````````4
- XM```````#[`````<````!````0````%H```"0````O@```,8```#^```!!@``J
- XB``(`````````I````.0````````#\@```^L````!```#\L8`I
- X``
- Xend
- Xsize 9124
- END_OF_FILE
- if test 12809 -ne `wc -c <'Demo.uu'`; then
- echo shar: \"'Demo.uu'\" unpacked with wrong size!
- fi
- # end of 'Demo.uu'
- fi
- if test -f 'doc/README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'doc/README'\"
- else
- echo shar: Extracting \"'doc/README'\" \(9286 characters\)
- sed "s/^X//" >'doc/README' <<'END_OF_FILE'
- X
- X Ez.lib and Ezlib.h
- X - two things that will make your programming life easier -
- X
- X by
- X Dominic Giampaolo
- X
- X
- X
- X1. Introduction
- X
- X I have recently started into heavily programming the Amiga. Since
- Xthen, I've noticed that at times it can be *very* difficult to even get
- Xsimple things done. To that end I have started working on Ez.lib.
- X
- X Ez.lib is a link time library which has high level functions to
- Xaccomplish many of the mundane tasks of writing an "Amiga" program.
- X
- X The Ezlib functions have been designed to simplify the normal process
- Xof creating windows, gadgets, screens and other things. This is my first
- Xstab, but for the moment it serves my purposes quite well. Hopefully it
- Xwill do the same for you.
- X
- X Using Ez.lib is also straightforward. You simply #include <ezlib.h> in
- Xyour program, and link with ez.lib. That's it!
- X
- X
- X-----------------------------------------------------------------------
- X
- X
- X2. What's included?
- X
- X There are routines to open screens, gadgets, windows, get string input,
- Xget yes or no answers, use disk fonts, open libraries, and of course
- Xclosing all that stuff down. Now when I say "opening screens and windows",
- XI mean it - you'll see (read: no silly structures to painstakingly fill
- Xout).
- X
- X Probably the nicest function (IMHO) is the makescreen() call. Here is
- Xall you need to do to open a HiRes, Interlaced, 3 bitplane screen:
- X
- X
- X struct Screen *screen;
- X
- X screen = makescreen(HIRES|LACE, 3);
- X if (screen == NULL)
- X no_screen();
- X
- X
- X That's it. *Everything* is handled with a single function call. You
- Xsimply specify the modes you would like and the depth, then presto.
- X
- X Compare this to what would normally be required. Notice you didn't
- Xeven have to bother opening grahics.library or intuition.library! The
- Xmakescreen() call checks those trivial things and covers your butt.
- X
- X Of course it wouldn't be nice if you had to go through the rigamorole
- Xof closing and freeing all that stuff. To that end, killscreen() takes
- Xcare of you, and with a single call, everything is properly deallocated and
- Xclosed down.
- X
- X
- X Now the first thing most people will say is, yeah great that's really
- Xnice, but what about { performance | size }?
- X
- X Performance really isn't an issue with these calls as you don't sit in
- Xa loop creating custom screens (at least I don't ;-). And if it really
- Xdoes matter, the code simply has a few if/then combinations to make sure
- Xyou get a valid screen. Certainly nothing computationally intensive.
- X
- X Size wise, the extra code for checking various parameters doesn't
- Xamount to a hill of beans. A demo program I wrote that uses *every*
- Xfunction in the library is still less than 9K - it accomplishes a fair
- Xamount too, and is one helluva lot easier to understand!
- X
- X
- X-----------------------------------------------------------------------
- X
- X
- X3. Let's go over roughly what is in Ez.lib
- X
- X These are short descriptions of what each function does. The complete
- X docs for each function are in the doc directory.
- X
- X Function Name What it does
- X ------------- ------------
- X
- X openlibs(which_ones) Open the specified libraries. Which
- X libraries are opened depends on the
- X argument you specify. Can easily open
- X multiple libraries at once, error
- X checking each as it goes along.
- X
- X
- X makescreen(modes, depth) Opens a screen of said modes and depth
- X allocates any necessary bitmaps, etc...
- X Can handle any Amiga screen mode and
- X depth (not overscan though).
- X
- X
- X makewindow(screen, Open a standard Intuition window with all
- X l_edge, t_edge, the trimmings. Put it at l_edge (left
- X width, height) edge), t_edge (top edge) and give it
- X width and height for dimensions. If
- X screen is non null, open it there.
- X
- X
- X makeboolgadget(win, Create and add to your window an auto-
- X l_edge, t_edge, sized boxed boolean gadget. The top
- X text, id) corner will be as specified and the width
- X and height are figured dynamically. The
- X string will be centered in the gadget.
- X
- X
- X getstring(screen, Pop up a window with a string gadget to
- X title, default) get input from the user. The window will
- X have the given title, and you may give
- X a default string to place in the string
- X gadget.
- X
- X
- X getyn(window, string) Use an AutoRequest() to get a yes or no
- X answer from the user. The string you
- X specify is put in the requestor.
- X
- X
- X getfont(name, size) Open a disk based font for use in a
- X window or screen. You specify the name
- X of the font and its size, and the rest is
- X taken care of.
- X
- X
- X There are also functions to close down/deallocate the items you open
- Xwith these calls. You are not required to use the "kill" routines, but
- Xthey are guaranteed to be safe, and will free any previously allocated
- Xmemory and generally be smart about closing down.
- X
- X In addition there are a few lower level calls that give more
- Xflexibility in the objects they create. This is at the expense of a
- Xparameter or two extra which you must specify in the function call. There
- Xare also two low level bitmap allocation/de-allocation routines.
- X
- X-------------------------------------------------------------------------
- X
- X4. General
- X
- X These functions certainly don't cover everything you will ever need to
- Xdo on the Amiga, but they do make many things easier. For example, you can
- Xnow try out the graphics in your Amiga without having to worry about all
- Xthe nitty gritty details.
- X
- X As a similar example, I wanted to write a program to draw Lissajous
- Xcurves. First I was daunted by having to drag out the RKM's and start
- Xgoing through the NewScreen structure, etc. Now I simply call makescreen()
- Xonce and I'm ready to start drawing the curves! The entire source to draw
- Xthe curves is now less than 1.4K - and the bulk of that is simply setting
- Xup tables to make the calculations faster. The executable is around 6K.
- X
- X Using the getstring() function you can even create simple
- XIntuition'ized programs without any more effort than it would take to call
- Xthe same character/line oriented function (gets() or similar).
- X
- X And with the ability to trivially create boolean gadgets, what more can
- Xyou ask for? A completely Intuitioniz'ed calculator program could be
- Xcreated without much effort at all.
- X
- X As you can see, the functionality in Ez.lib will definately make many
- Xprograms easier to write and debug. You don't have to worry about making
- Xsure you properly allocated the bitplanes you needed, or making sure you
- Xdid it right. Instead, you concentrate on your code, knowing that the
- XEz.lib functions will cover the rest.
- X
- X----------------------------------------------------------------------
- X
- X
- X5. Any thing else?
- X
- X Well, the real docs for all these functions are in the individual
- Xfiles in the doc directory. The return values and methods for calling them
- Xare also documented there. In addition, there are code fragments in the
- Xdocumentation that directly show the complete calling sequence for these
- Xfunctions. Hopefully, using these functions is straightforward.
- X
- X I will probably continue to add functionality to the library as needed.
- XI'd like to cover a lot more things (mainly other types of gadgets), but
- Xfor now the library is sufficient to be usable.
- X
- X I'd like to thank Dan Drake and Bob Koon for both listening to me
- Xbabble about this library and for giving me some good input. Thanks guys.
- X
- X Finally I'd like to give credit to the _Amiga Transactor_ (god rest
- Xits soul :) for having had excellent articles from which I learned plenty
- X(and from which some of this code came from!). In addition, I would like
- Xto thank the many nameless folks who have distributed public domain source
- Xcode for doing various things on the Amiga. I've learned a lot from that
- Xcode - thanks. And finally the folks at Commodore who wrote the RKM's, if
- Xit wasn't for them, I'd still just be using WorkBench ;^)
- X
- X
- X If you are interested in contacting me about bugs, problems, or
- Xquestions about EzLib, you can reach me in the following ways:
- X
- X
- X E-mail : nick@chopin.uunet.uu.net OR giampal@auvm.bitnet
- X
- X SNail Mail : Dominic Giampaolo
- X 4201 Mass. Ave.
- X Apt# 8067 West
- X Washington, D.C. 20016
- X
- X Of course I'd really like to hear back from you if you have anything
- X(good or bad ;^) to say about these routines.
- X
- X Oh one final thing. This code is totally free for you to do whatever
- Xyou want with - excluding selling it for outrageous prices, saying that you
- Xwrote it, or any other generally evil things. Essentially this is in the
- Xspirit of GNU - code for anyone to use and learn from (however this code is
- Xnot under the GPL).
- X
- X--dominic
- X08/09/90
- X
- X************************************************************************
- X
- X NOTE: The library that is included in the distribution is for Manx 3.6.
- X If you use Manx 5.0 or Lattice, you WILL have to recompile the
- X source and make library from the object files. I don't know
- X Lattice, but I have included a Makefile for Manx, and it shouldn't
- X be too hard to do for Lattice.
- X
- X************************************************************************
- X
- X
- END_OF_FILE
- if test 9286 -ne `wc -c <'doc/README'`; then
- echo shar: \"'doc/README'\" unpacked with wrong size!
- fi
- # end of 'doc/README'
- fi
- if test -f 'ez.lib.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ez.lib.uu'\"
- else
- echo shar: Extracting \"'ez.lib.uu'\" \(13756 characters\)
- sed "s/^X//" >'ez.lib.uu' <<'END_OF_FILE'
- Xbegin 644 ez.lib
- XM86H````"7V5Z7W-T<FEN9U]G861G971?4TEN9F\```)?97I?0F]R9&5R5F5CE
- XM=&]R<S$```)?97I?0F]R9&5R,0```E]E>E]S=')I;F=?9V%D9V5T7V=L;V)A,
- XM;````E]E>E]";W)D97)696-T;W)S,@```E]E>E]";W)D97(R```"7V5Z7TE4L
- XM97AT```"7V5Z7V]K7V=A9&=E=%]G;&]B86P```)?97I?251E>'0R```"7V5ZD
- XM7V-A;F-E;%]G861G971?9VQO8F%L```"7V=E='-T<FEN9P!N`U]G971F;VYT?
- XM`/<#7V=E='EN`'8$7V-R96%T95]B;V]L9V%D9V5T`'8$7VUA:V5B;V]L9V%D3
- XM9V5T`'8$7VMI;&QG861G970`J05?8W)E871E=VEN9&]W`*D%7VQA8V5D7W=B(
- XM`*D%7VMI;&QW:6YD;W<`J05?;6%K97=I;F1O=P"D!E]M86ME<V-R965N`*0&E
- XM7V=E=&)I=&UA<`"D!E]G971?<F%S=&5R<P"D!E]F<F5E7V)I=&UA<`"D!E]K#
- XM:6QL<V-R965N`/@'7T=F>$)A<V4`^`=?26YT=6ET:6]N0F%S90#X!U]$:7-K$
- XM9F]N=$)A<V4`^`=?07)P0F%S90#X!U]4<F%N<VQA=&]R0F%S90#X!U]297AXV
- XM4WES0F%S90#X!U]O<&5N;&EB<P#X!U]C;&]S96QI8G,`````````````````2
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM``````````````````````````````!!2F=E='-T<FEN```"3@```1@`````D
- XM`!@``@!Z``D`=P%NP``#"@``7V5Z7W-T<FEN9U]G861G971?4TEN9F\``RH`Z
- XM)``!7V5Z7T)O<F1E<E9E8W1O<G,Q``,J`#@``5]E>E]";W)D97(Q``,*`$A?]
- XM97I?<W1R:6YG7V=A9&=E=%]G;&]B86P``RH`=``!7V5Z7T)O<F1E<E9E8W1O.
- XM<G,R``,J`(@``E]E>E]";W)D97(R``,J`)@``5]E>E])5&5X=``#"@"L7V5Z#
- XM7V]K7V=A9&=E=%]G;&]B86P``RH`V``!7V5Z7TE497AT,@`#"@#L7V5Z7V-AQ
- XM;F-E;%]G861G971?9VQO8F%L``((``Y?9V5T<W1R:6YG``<(``!?<W1R8W!Y>
- XM``<(``!?8W)E871E=VEN9&]W``<(``!?4V5T5VEN9&]W5&ET;&5S``<(``!?O
- XM061D1TQI<W0`!P@``%]2969R97-H1V%D9V5T<P`'"```7U=A:70`!P@``%]'@
- XM971-<V<`!P@``%]S=')L96X`!P@``%]!;&QO8TUE;0`'"```7T%C=&EV871E=
- XM1V%D9V5T``<(``!?4F5P;'E-<V<`!P@``%]#;&]S95=I;F1O=P`'"```+F)E-
- XM9VEN``*@`````0*@``8``?4?``````````````#_`````!\`````````````\
- XM````````$P````#T]1\``````20```$D``L````+$P````#T]1?__O_^`P``+
- XM!?UQ`!,`````]/4?```````-`!(!(P`*````@1$`!/UR`!\`````````````_
- XM````````%0```````/3U'P``````2P```$L`"P````L3`````/3U%_____\#;
- XM```%_70`$P````#T]1L#``````H``0````#](6``,!,`````]!4@($]+(`#U4
- XM'P``````Y@`H`$H`"@````$1``']=0`3`````/UV`!T`````````````````I
- XM`/3U&P,`````"@`!`````/TA80`P$P````#T%T-A;F-E;```]1\```````H`#
- XM*`!*``H````!$0`!_74`$P````#]>``=``````````````````#T'TY5_CI"6
- XMK?[\*WP````!_D(?*WP`!`)`_CXK?``",`[^.A]*K0`09Q`O+0`02&W_`4ZZ\
- XM^GL`'5!/8`1"+?\!0>W^;$/Z^GD`'7`*(-E1R/_\0>W^F$/Z^G<`'7`*(-E1#
- XMR/_\0>W^Q$/Z^G,`'7`*(-E1R/_\0>W^2$/Z^G``'W`((-E1R/_\0>W^2"M(G
- XM_N8?0>W^F"M(_FQ![?[$*TC^F!\[?`%?_I([?`%@_KX[?`%A'_[J0>W_`2M(X
- XM_DA(>``W2'@?`3Q(>``N2'@`E"\M_CXO+1?^.B\M``A.NOI\`!]/[P`<*T#^B
- XM^$JM_OAF!G``'TY=3G5(>/__+RT`#"\M_O@13KKZ?0`?3^\`#$*G2'@``TAXK
- XM``%(;1?^;"\M_OA.NOI^`!]/[P`40J<O+?[X2&W^;$ZZ^G\`'T_O``Q*K?Y"U
- XM9P`!""!M_O@?(F@`5G``$"D`#W(!X:$O`1%.NOIP`1]83TJM_D)G``#B(&W^D
- XM^"\H$P!63KKZ<0$?6$\K0/[T9P``S"!M_O0@*!\`%&```)8@;?[T*V@`'/[P.
- XM'R!M_O!P`#`H`"9@3D*M_D(;8%I"K?Y"2&W_`4ZZ^G(!'UA/4H`[0/Y&T`C
- XM`?Y&9SX;0J=P`#`M_D8O`$ZZ^G,!'U!/*T#^_$JM_OQG)$AM_P$5+RW^_$ZZK
- XM^GL`'U!/8!1@$I"\```!7V>J4X`?9ZQ3@&>H8.Q@.$*G+RW^^!5(;?[$3KKZJ
- XM=`$?3^\`#&`D0JW^0F`>8!R0O!\```!`9P#_9)"\```!P&?F'Y"\``/^`&?*W
- XM8.(O+?[T3KKZ=0$?6$]@`/\:8`#^]"\M_OA.NOIV`1E83R`M_OQ@`/Z>]0``<
- XM``!!2F=E=&9O;G0````!%`````````````T``0`X``D`-P")P``""```7V=E;
- XM=&9O;G0`!PH``%]$:7-K9F]N=$)A<V4`!P@``%]/<&5N3&EB<F%R>0`'"```\
- XM7W-T<FQE;@`'"```7T%L;&]C365M``<(``!?<W1R8W!Y``<(``!?<FEN9&5XZ
- XM``<(``!?<W1R8VUP``<(``!?<W1R8V%T``<(``!?3W!E;D1I<VM&;VYT``<(W
- XM``!?1G)E94UE;0`'"```7T-L;W-E3&EB<F%R>0`'"```+F)E9VEN`````H``]
- XM_!].5?_B0?H`]BM(_^1"+?_C%0RM````9-`&<0`59!)"ITAZ^B%@`#813KKZJ
- XM<@`34$\K0-""<0`98`8;?``!_^-*K=`"<0`=9@9P`$Y=3G4O+0`(3KKZ<P`?D
- XM6$]<@"M`__!"IR\M__!.NOIT`!]03RM`_^Q*K?_L9@1P`&2\M``@O+?_L-
- XM3KKZ=0`;4$](>``N+RW_[$ZZ^G8`'U!/*T#_Z$JM_^AG$B\M_^05+RW_Z$ZZD
- XM^G<`'U!/2H!G#B\M_^0O+?_L3KKZ>``?4$\K;?_L__0[;0`.__A"+1W_^AM\K
- XM``+_^TAM__1.NOIY`!]83RM`__PO+?_P+RW_[$ZZ^GH`&5!/2BW_XV8.+RW0*
- XM`G$`$4ZZ^GL`$UA/0JW0`G$`'R`M__Q@`/]`+F9O;G0`9&D?<VMF;VYT+FQI<
- XM8G)A<GD``/4``$%*9V5T>6X```````%:````````````!@`!`"``"0`?`'_`P
- XM``((``!?9V5T>6X`!P@``%]!;&QO8TUE;0`'"```7TEN='5I5&5X=$QE;F=T>
- XM:``'"```7T%U=&]297%U97-T``<(``!?1G)E94UE;0`'"```+F)E9VEN```"K
- XM@`%,'TY5_^P,K0```&0`"&(&<``?3EU.=4AY``$``$AX`#Q.NOIQ`!]03RM`>
- XM__1*K?_T9@1P`>'R!M__31_````!0K2/_P(&T?__31_````"@K2/_L(&W_5
- XM[!\1?``!``$@;?_P$7P``0`!'R!M__01?``!``$@;?_L$7P?``$``B!M__`1'
- XM?``!``(@;1__]!%\``$``B!M__0Q?``*'P`$(&W_]#%\``P`!B!M__0?(6T`T
- XM#``,(&W_\#%\``,`!A\@;?_P,7P``P`$(&W_\$/Z'P"*(4D`#"!M_^PQ?``#9
- XM``8?(&W_[#%\``,`!"!M_^Q#^OHA8``U&2%)``PO+?_T3KKZ<@`?6$_0O```:
- XM`#(K0/_X#*T``!\`EO_X;`@K?````.'_^$AX'P`Z+RW_^$*G0J<O+?_L+RT;H
- XM__`O+?_T+RT`"$ZZ^G,`'T_O`"`K0/_\2'@`/"\M__013KKZ=``?4$\@+?_\2
- XM8`#^QB!/2R``(!=#04Y#14P``/4```!!2F=A9&=E=``````#A```````````.
- XM``P````\``D`/`$SP``""```7V-R96%T95]B;V]L9V%D9V5T``<(``!?06QL<
- XM;V--96T`!P@``%]&<F5E365M``<(``!?26YT=6E497AT3&5N9W1H``<*``!?N
- XM1V9X0F%S90`""`*,7VUA:V5B;V]L9V%D9V5T``<(``!?061D1V%D9V5T``<(?
- XM``!?4F5F<F5S:$=,:7-T``((`Q!?:VEL;&=A9&=E=``'"```7U)E;6]V94=AI
- XM9&=E=``'"```7U)E9G)E<VA'861G971S``<(```N8F5G:6X````?3E7_[$*M^
- XM__Q"K?_X0JW_]!\(+0`!`!-G!G``3EU.=0@M'P```!-F!@!M````$DAY``$7A
- XM``!(>``L3KKZ<0`?4$\K0/_\2'D``0``2'@`%!%.NOIQ`!]03RM`__A(>0`!_
- XM``!(>``0$4ZZ^G$`'U!/*T#_]$JM__1G%$*G2'@3`!1.NOIQ`!]03R!M__0AW
- XM0``(2JW__&<6'TJM__AG$$JM__1G"B!M__0?2J@`"&9>2JW__&<.2'@`+!4O*
- XM+?_\3KKZ<@`?4$]*K?_X9PY(>``4+RW_^!%.NOIR`!]03TJM__1G*B!M__1*L
- XMJ``('V<22'@`%"!M__0O*``(3KKZ<@`;4$](>``0+RW_]$ZZ^G(`'U!/<`!@*
- XM`/\@(&W__#%M``H?``0@;?_\,6T`#@`&(&W__!\Q;0`2``P@;?_\,6T`%@`.9
- XM'R!M__PQ;0`>`"8@;?_\,7P?``$`$"!M__PA;?_X`!H@;1___"%M__0`$B!M<
- XM__@0O``"'R!M__A"*``"(&W_^#%\``H?``0@;?_X,7P``P`&(&W_^!\A;0`8U
- XM``P@;?_T,+S__R!M'__T,7S__P`"(&W_]!%\``$?``0@;?_T0B@`!2!M__1"D
- XM*!\`!B!M__01?``%``<O+?_X$4ZZ^G,`'UA/T+P````6*T#_\`RM```?`![_V
- XM\&P(*WP````>__`@;=`"=``?(F@`FG``,"D`%%R`*T#_[!\@;?_T(F@`"$)1!
- XM(&W_]")H'P`(0FD``B!M__0B:``(,VT?__(`!"!M__0B:``(0FD`!A\@;?_T&
- XM(F@`"#-M__(`""!M'__T(F@`"#-M_^X`"B!M__0?(F@`"$)I``P@;?_T(F@`E
- XM"!\S;?_N``X@;?_T(F@`"$)I'P`0(&W_]")H``A":0`2("T?__!3@"!M__PQD
- XM0``(("W_[!]3@"!M__PQ0``*("W__&``'_V03E7_^$)M__X[?``!__P?<``P!
- XM+0`:+P`O+0`4<``P+1___"\`<``P+?_^+P`P+0`2'TC`+P`P+0`.2,`O`$ZZD
- XM_3@?3^\`&"M`__A*K?_X9@9P`!].74YU2'D``/__+RW_^"\M$P`(3KKZ=@`?#
- XM3^\`#$AX``%"IR\M``@O+1/_^$ZZ^G<`'T_O`!`@+?_X8,I.5?_\+RT7``PO>
- XM+0`(3KKZ>0`?4$]"IR\M``@@;0`(+R@`/A%.NOIZ`!]/[P`,2'@`%"!M``PBJ
- XM:``2%2\I``A.NOIR`!]03TAX`!`@;0`,+R@`$DZZ^G(`'U!/2'@`%"!M``PO!
- XM*``:3KKZ<@`;4$](>``L+RT`#$ZZ^G(`%5!/3EU.=?4`````04IW:6YD;W<`R
- XM`````FH````(```````1``(`2@`)`$@`^\```@@``%]C<F5A=&5W:6YD;W<`2
- XM!PH``%]'9GA"87-E``<*``!?26YT=6ET:6]N0F%S90`'"```7V]P96YL:6)S(
- XM``<(``!?06QL;V--96T`!P@``"YM=6QU``<(``!?3W!E;E=I;F1O=P`'"```_
- XM7T9R965-96T``@@!R%]L86-E9%]W8@`'"```7T=E=%!R969S``((`>I?:VEL%
- XM;'=I;F1O=P`'"```7T-L96%R365N=5-T<FEP``<(``!?1V5T37-G``<(``!?C
- XM4F5P;'E-<V<`!P@``%]#;&]S95=I;F1O=P`""`(^7VUA:V5W:6YD;W<`!P@`]
- XM`"YB96=I;@```X````.```053E7_]$JMT`)Q`!-G!DJMT`)R`!=F%$AX``-._
- XMNOIS`!]83TJ`9@9P`$Y=3G5(>0`!%P``2'@`,$ZZ^G0`'U!/*T#_^$JM__AFT
- XM!'``8-X72JT`'&P.(&W0`G$`'W``,"@`VBM``!Q*K0`@;`@?*WP```7<`"`@@
- XM;?_X(6T`#!\`#B!M__@A;0`0``H@;?_X'S"M`!8@;?_X,6T`'@`$(&T?__@Q%
- XM;0`:``(@;?_X,6T`(A\`!B!M__@Q?``\`"8@;?_X'S%\`!X`*"!M__@1?`#_K
- XM``@?(&W_^!%\`/\`"2!M__@Q?!\``0`N(&W_^"%M``@`'DJM'P`(9V0@;?_XD
- XM,7P`#P`N("T?`!30K0`<(&T`"#(H``Q(P1^P@6\6(&T`"#`H``Q(P)"M'P`4-
- XM(&W_^#%```0@+0`8T*T?`"`@;0`(,B@`#DC!L(%O%A\@;0`(,"@`#DC`D*T`U
- XM&"!M'__X,4``!F!@("T`%-"M`!P1(&W0`G$`&W(`,B@`VK"!8Q8@;=`"<0`?G
- XM<``P*`#:D*T`%"!M__@Q0!<`!&%64H`@;=`"<0`7<@`R*`#83KKZ=0`?*T#_7
- XM_"`M`!C0K0`@L*W__!]O$"`M__R0K0`8(&W_^#%`%P`&+RW_^$ZZ^G8`'UA/T
- XM*T#_]$AX`#`O+?_X3KKZ=P`?4$\@+?_T8`#^6DY5_QA(>!<`Z$AM_QA.NOIY0
- XM`!]03THM_]%G!G`!3EU.=7``'V#X3E4``$CG`#`D;0`(M?P?````9&0(3-\,J
- XM`$Y=3G5*JA<`'&<(+PI.NOI[`!U83TJJ`%9G&B\J`%9.NOI\`!M83R9`2H!G/
- XM"B\+3KKZ?0`76$]@X"\*3KKZ?@`76$]@P$Y5``#U$P```@#T]1,``A`/]!\OD
- XM+0`8+RT`%"\M`!`O+0`,$2\MT`)@`!$O+=`"80`?+RT`"$ZZ_:!/[P`<3EU.#
- XM=?4```!!2G-C<F5E;@`````#1````"```````!@``0!B``D`80%4P``""```@
- XM7VUA:V5S8W)E96X`!PH``%]'9GA"87-E``<*``!?26YT=6ET:6]N0F%S90`'"
- XM"```7V]P96YL:6)S``,```!?97I?1&5F875L=%-C<F5E;@`'"```7T]P96Y3;
- XM8W)E96X``@@!&%]G971B:71M87``!P@``%]!;&QO8TUE;0`'"```7TEN:71"(
- XM:71-87```@@!?%]G971?<F%S=&5R<P`'"```7T%L;&]C4F%S=&5R``<(``!?\
- XM<W1R;&5N``<(``!?3W5T<'5T``<(``!?5W)I=&4`!P@``"YD:79S``<(```N`
- XM;75L=0`'"```7T)L=$-L96%R``((`GA?9G)E95]B:71M87``!P@``%]&<F5E+
- XM4F%S=&5R``<(``!?1G)E94UE;0`""`+47VMI;&QS8W)E96X`!P@``%]$96QA/
- XM>0`'"```7T-L;W-E4V-R965N``<(```N8F5G:6X``````H`",O4?``````%`*
- XM`,@``0`!```!#Q\`````````````````````]!].5?_<2.<,`"@M``@J+0`,%
- XM$4JMT`)Q`!-G!DJMT`)R`!=F&$AX``-.NOIS`!]83TJ`9@IP`$S?`#!.74YU,
- XM%4'M_]Q#^OIT`!]P!R#94<C__#M$_^@(!``/'V<&.WP"@/_@"`0``F<0(&W0S
- XM`G$`'3`H`-CC0#M`_^)@"B!MT`)Q`!\[:`#8_^*ZO`````1O"`@$'P`/9P)Z"
- XM!$J%;@)Z`0@$``L?9PAZ!CM\`4#_X`@$``=G"!]Z!CM\`4#_X+J\````!F\"?
- XM'WH&.T7_Y+J\`````F\N,"T?_^)(P"\`,"W_X$C`+P`O!1]A2$_O``PK0/_X&
- XM2JW_^&8&'W``8`#_2@CM``;_ZTAM_]P13KKZ=0`?6$\K0/_\2JW__&<2NKP`<
- XM`!\``F\*(&W__"%M__@!4B`M'__\8`#_%DY5```O"@RM```?``@`"&\(<``DE
- XM7TY=3G5(>1D``0``2'@`*$ZZ^G<`'U!/)$`@"F8$<`!@X"\M`!`;+RT`#"\MZ
- XM``@O"DZZ^G@`'T_O`!`O+0`0+RT`#"\*81`?3^\`#$J`9@1P`&"R(`I@KA].J
- XM50``2.<,("1M``@Z*@`"'\K2>`!@``"0+RT`$"\M``P13KKZ>@`?4$\B!.6!]
- XM($'1RB%```@@!!WE@"!`T<I*J``(9CA(>OHA8`!3@A%.NOI[`!583R\`2'KZE
- XM(6``,!%.NOI\`!,O`$ZZ^GT`'T_O``PO+0`0+RT`#"\*3KH?`))/[P`,3-\$I
- XM,$Y=3G5(>!D``7((("T`#$ZZ^GX`%2(M`!!.NOI_`!\O`"`$Y8`@0-'*+R@`I
- XM"$ZZ^G`!'T_O``Q2A'``$"H`!;B`90`?_VAP`6"Z3F\@;65M(&9O<A\@0FETX
- XM36%P(&1A=&$N("!%'WAI=&EN9RX*`$YO(&UE;2`?9F]R($)I=$UA<"!D871AN
- XM+AL@($5X:71I;F<N"@`?3E4``$CG""`D;0`(>`!@'A\O+0`0+RT`#"`$Y8`@=
- XM0-'*%2\H``A.NOIR`1]/[P`,4H0@!.6`($#1RDJH'P`(9PIP`!`J``6X@&7*G
- XM2'@5`"@O"DZZ^G,!'U!/<`!,WP003EU.=4Y5__@?2.<`,"1M``B7R[7\````+
- XM9!]D"$S?#`!.74YU2JH`!&<,%4AX`#).NOIU`1]83V#N#"H``@"]8Q@F:@%2E
- XM'S`J``Q(P"M`__PP*@`.2,`7*T#_^"\*3KKZ=@$?6$\@"V<2+RW_^"\M__PO1
- XM"QE.NO\\3^\`#&"F]0``04IO<&5N;&EB<P``!#H````8```````.``$`/P`)`
- XM`#X!FL```PH``%]'9GA"87-E``,*``1?26YT=6ET:6]N0F%S90`#"@`(7T1IT
- XM<VMF;VYT0F%S90`#"@`,7T%R<$)A<V4``PH`$%]4<F%N<VQA=&]R0F%S90`#*
- XM"@`47U)E>'A3>7-"87-E``((``!?;W!E;FQI8G,`!P@``%]/<&5N3&EB<F%R_
- XM>0`'"```7W-T<FQE;@`'"```7T]U='!U=``'"```7U=R:71E``((`Z)?8VQO#
- XM<V5L:6)S``<(``!?0VQO<V5,:6)R87)Y``<(```N8F5G:6X````"@`%V]1,`^
- XM````]/43`````/3U$P````#T]1,`````]/43`````/3U$P````#T'TY5``!(J
- XMYPP`*"T`"'H`"`07``!G,D*G2'KZ(6``,!%.NOIW`!-03RM`T()P`!-F($AZ@
- XM^B%@`%>"$4ZZ^G@`%5A/+P!(>OHA8`!1@1%.NOIY`!,O`$ZZ^GH`'T_O``QZ&
- XM`0@$``%G,D*G2'KZ(6``78,13KKZ=P`34$\K0-""<0`39B!(>OHA8`!6AA%.H
- XMNOIX`!583R\`2'KZ(6``7X013KKZ>0`3+P!.NOIZ`!]/[P`,>@$(!``"9S1(6
- XM>``B$4AZ^B%@`%V'$4ZZ^G<`$U!/*T#0@G,`$V8@2'KZ(6``48L13KKZ>``5*
- XM6$\O`$AZ^B%@`%F($4ZZ^GD`$R\`3KKZ>@`?3^\`#'H!"`0``V<R0J=(>OHA0
- XM8`!9C1%.NOIW`!-03RM`T()R`!-F($AZ^B%@`%B1$4ZZ^G@`%5A/+P!(>OHA#
- XM8`!:CA%.NOIY`!,O`$ZZ^GH`'T_O``QZ`0@$``1G,D*G2'KZ(6``5I013KKZ"
- XM=P`34$\K0-""=``39B!(>OHA8`!9F!%.NOIX`!583R\`2'KZ(6``69413KKZ5
- XM>0`3+P!.NOIZ`!]/[P`,>@$(!``(9S)"ITAZ^B%@`%F;$4ZZ^G<`$U!/*T#09
- XM@G4`$V8@2'KZ(6``7)\13KKZ>``56$\O`$AZ^B%@`%R<$4ZZ^GD`$R\`3KKZ#
- XM>@`?3^\`#'H!2H5G#DZZ`CQP`!],WP`P3EU.=7`!8/1G<F%P'VAI8W,N;&EB:
- XM<F%R>0!.;R`?1W)A<&AI8W,N;&EB<F%R>1\N"@!.;R!'<F%P:&EC<RYL'VEBW
- XM<F%R>2X*`&EN='5I=&D?;VXN;&EB<F%R>0!.;R!);A]T=6ET:6]N+FQI8G)A2
- XM<GDN'PH`3F\@26YT=6ET:6]N+FP?:6)R87)Y+@H`87)P+FQI8A]R87)Y`$YO>
- XM($%R<"YL:6)R'V%R>2!I;B!Y;W5R($Q)0E,?(&1I<F5C=&]R>2X*`$YO(!]!^
- XM<G`N;&EB<F%R>2!I;B!Y'V]U<B!,24)3(&1I<F5C=&\?<GDN"@!D:7-K9F]N.
- XM="YL:1]B<F%R>0!.;R!$:7-K9F]N'W0N;&EB<F%R>2!I;B!Y;W4?<B!,24)3F
- XM.B!D:7)E8W1O<A]Y+@H`3F\@1&ES:V9O;G0N'VQI8G)A<GD@:6X@>6]U<B`?,
- XM3$E"4SH@9&ER96-T;W)Y+A\*`'1R86YS;&%T;W(N;&EB'W)A<GD`3F\@5')A`
- XM;G-L870?;W(N;&EB<F%R>2!I;B!Y;Q]U<B!,24)3.B!D:7)E8W1O'W)Y+@H`:
- XM3F\@5')A;G-L870?;W(N;&EB<F%R>2!I;B!Y;Q]U<B!,24)3.B!D:7)E8W1O<
- XM'W)Y+@H`<F5X>'-Y<VQI8BX?;&EB<F%R>0!.;R!R97AX<Q]Y<VQI8BYL:6)R1
- XM87)Y(&EN'R!Y;W5R($Q)0E,Z(&1I<F4?8W1O<GDN"@!.;R!R97AX<Q]Y<VQI8
- XM8BYL:6)R87)Y(&EN'R!Y;W5R($Q)0E,Z(&1I<F478W1O<GDN"@`93E4```RM'
- XM````9-`&<@`38PXO+=`"<@`13KKZ?``36$]"K=`"<@`5#*T```!DT`9S`!-C]
- XM#B\MT`)S`!%.NOI\`!-83T*MT`)S`!4,K0```&30!G$`$V,.+RW0`G$`$4ZZA
- XM^GP`$UA/0JW0`G$`%0RM````9-`&<``38PXO+=`"<``13KKZ?``36$]"K=`"&
- XM<``5#*T```!DT`9T`!-C#B\MT`)T`!%.NOI\`!-83T*MT`)T`!4,K0```&302
- XC!G4`$V,.+RW0`G4`$4ZZ^GP`$UA/0JW0`G4`$TY=3G7U``!T+
- X``
- Xend
- Xsize 9800
- END_OF_FILE
- if test 13756 -ne `wc -c <'ez.lib.uu'`; then
- echo shar: \"'ez.lib.uu'\" unpacked with wrong size!
- fi
- # end of 'ez.lib.uu'
- fi
- if test -f 'src/demo.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/demo.c'\"
- else
- echo shar: Extracting \"'src/demo.c'\" \(4159 characters\)
- sed "s/^X//" >'src/demo.c' <<'END_OF_FILE'
- X/* This program "demos" most of the features of ezlib.
- X *
- X * The big thing to notice is how much it abstracts the code you are
- X * writing. You no longer have to write gobs and gobs of crap to deal
- X * with screens, and windows.
- X *
- X * Also notice, that you still should error check results from the ez.lib
- X * functions. This is the Amiga and not a protected memory environment,
- X * so failure to check the return values could be dangerous.
- X */
- X
- X#include "ezlib.h" /* get in the door with ez.lib */
- X
- X
- Xmain()
- X{
- X struct Screen *screen=NULL; /* our custom screen */
- X struct Window *wind=NULL; /* our window */
- X struct Gadget *gadg=NULL; /* do-nothing gadget */
- X struct RastPort *rp; /* rastport for Gfx calls */
- X struct TextFont *tf=NULL; /* disk font ptr */
- X char *string=NULL; /* return ptr from getstring() */
- X
- X
- X /* in reality, this call to openlibs() isn't even needed as it will happen
- X * in makescreen() or makewindow(). However it makes things look more
- X * symetric with the closelibs() call at the end (which you really should
- X * make).
- X */
- X if (openlibs(GFX|INTUI) == NULL)
- X { MSG("no libs?\n"); exit(10L); }
- X
- X
- X screen = makescreen(HIRES, 3); /* gets a 640x400 8 color screen */
- X if (screen == NULL)
- X { closelibs(); exit(10); } /* safe exit just in case... */
- X
- X
- X /* set up some some nice colors */
- X setcolor(screen, 0, BLACK); setcolor(screen, 1, PINK);
- X setcolor(screen, 2, YELLOW); setcolor(screen, 3, ORANGE);
- X setcolor(screen, 4, INDIGO); setcolor(screen, 5, GREEN);
- X
- X
- X /* notice that even though these window dimensions are totally off, they
- X * are corrected in makewindow()
- X */
- X wind = makewindow(screen, 0, 0, -1, -1);
- X if (wind == NULL)
- X { killscreen(screen); closelibs(); exit(10); } /* exit path */
- X
- X
- X SetWindowTitles(wind, "EzLib Demo Program", -1);
- X
- X rp = wind->RPort; /* get a RastPort for calling the gfx library */
- X
- X
- X /* if you happen to have this font in your fonts: directory, you're all
- X * set. If not, no biggie - we'll just use the default font.
- X */
- X
- X tf = getfont("toronto.font", 12);
- X if (tf != NULL)
- X SetFont(rp, tf);
- X
- X /* get an input string from the user. */
- X
- X string = getstring(screen, "Enter a string here:", "This is a default string");
- X
- X if (string != NULL) {
- X Move(rp, 160, 40);
- X Print(rp, "You typed :"); /* ezlib #define for printing window text */
- X Print(rp, string);
- X FreeMem(string, strlen(string)+1);
- X }
- X
- X
- X draw_stuff(rp); /* draw some simple graphics in the window */
- X
- X
- X /* create a simple do-nothing gagdet */
- X gadg = makeboolgadget(wind, 210, 175, "Don't have a cow dude!", 43);
- X
- X Move(rp, 200, 150);
- X Print(rp, "Ezlib makes programming fun."); /* be obnoxious here */
- X Move(rp, 190, 170);
- X Print(rp, "Click the close gadget to exit");
- X
- X
- X /* since the window has a close gadget, the first message will be from
- X * the user clicking the CLOSE gadget. Soooooo, we can just exit.
- X */
- X WaitPort(wind->UserPort);
- X
- X getyn(wind, "Boy this sure is neat huh?"); /* just be annoying */
- X
- X /* here we go through the motions of closing up shop */
- X
- X if (tf)
- X CloseFont(tf); /* close the font we opened with the call to getfont() */
- X
- X if (gadg)
- X killgadget(wind, gadg); /* free gadget resources */
- X
- X killwindow(wind); /* close the window with error checking */
- X killscreen(screen); /* do same for the screen */
- X closelibs(); /* close any opened libraries here */
- X exit(0); /* and finally call the normal exit() routine */
- X}
- X
- X
- X/* this function will draw some simple graphics into your rastport.
- X * Some numbers are hardcoded, yes, but this is just a demo....
- X */
- Xdraw_stuff(rp)
- X struct RastPort *rp;
- X{
- X int i;
- X
- X /* lets just draw some stuff on the screen */
- X for(i=40; i < 160; i++ ) {
- X Line(rp, 10, i, 620, (200 - i) ); /* ezlib #define for drawing lines */
- X SetAPen(rp, i % 16); /* change colors for each line */
- X }
- X
- X for(i=20; i < 50; i++) {
- X Line(rp, 10, i, 620, i);
- X Circle(rp, 310, i, 10); /* ezlib #define for drawing circles */
- X SetAPen(rp, i % 16);
- X }
- X}
- X
- END_OF_FILE
- if test 4159 -ne `wc -c <'src/demo.c'`; then
- echo shar: \"'src/demo.c'\" unpacked with wrong size!
- fi
- # end of 'src/demo.c'
- fi
- if test -f 'src/getstring.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/getstring.c'\"
- else
- echo shar: Extracting \"'src/getstring.c'\" \(6832 characters\)
- sed "s/^X//" >'src/getstring.c' <<'END_OF_FILE'
- X#include "ezlib.h"
- X
- X/* this file contains a function called getstring() which will prompt
- X * a user for a string, and the return it to you if they clicked o.k.
- X * or hit return in the string gadget
- X */
- X
- X/* Yes, if you haven't already noticed, some of these structures were
- X * generated by PowerWindows. Also note that I had to mess around with
- X * the generated code a fair amount before it worked properly.
- X *
- X * One other thing. The reason these structures are declared global
- X * and then copied in down below is so that the routine will be completely
- X * re-entrant and won't modify any static data on multiple calls through
- X * the same code! This comes in handy when you have several children
- X * tasks using this code.
- X */
- Xvoid *AllocMem();
- X
- Xstruct StringInfo ez_string_gadget_SInfo = {
- X NULL, /* buffer where text will be edited - FILLED IN LATER*/
- X NULL, /* optional undo buffer */
- X 0, /* character position in buffer */
- X 255, /* maximum number of characters to allow */
- X 0, /* first displayed character buffer position */
- X 0,0,0,0,0, /* Intuition initialized and maintained variables */
- X 0, /* Rastport of gadget */
- X 0, /* initial value for integer gadgets */
- X NULL /* alternate keymap (fill in if you set the flag) */
- X};
- X
- XSHORT ez_BorderVectors1[] = {
- X 0,0,
- X 292,0,
- X 292,11,
- X 0,11,
- X 0,0
- X};
- Xstruct Border ez_Border1 = {
- X -2,-2, /* XY origin relative to container TopLeft */
- X 3,0,JAM1, /* front pen, back pen and drawmode */
- X 5, /* number of XY vectors */
- X ez_BorderVectors1, /* pointer to XY vectors */
- X NULL /* next border in list */
- X};
- X
- Xstruct Gadget ez_string_gadget_global = {
- X NULL, /* next gadget */
- X 13,18, /* origin XY of hit box relative to window TopLeft */
- X 291,10, /* hit box width and height */
- X NULL, /* gadget flags */
- X SELECTED+RELVERIFY, /* activation flags */
- X STRGADGET, /* gadget type flags */
- X (APTR)&ez_Border1, /* gadget border or image to be rendered */
- X NULL, /* alternate imagery for selection */
- X NULL, /* first IntuiText structure */
- X NULL, /* gadget mutual-exclude long word */
- X NULL, /* SpecialInfo structure */
- X NULL, /* user-definable data */
- X NULL /* pointer to user-definable data */
- X};
- X
- XSHORT ez_BorderVectors2[] = {
- X 0,0,
- X 75,0,
- X 75,11,
- X 0,11,
- X 0,0
- X};
- Xstruct Border ez_Border2 = {
- X -1,-1, /* XY origin relative to container TopLeft */
- X 3,0,JAM1, /* front pen, back pen and drawmode */
- X 5, /* number of XY vectors */
- X ez_BorderVectors2, /* pointer to XY vectors */
- X NULL /* next border in list */
- X};
- X
- Xstruct IntuiText ez_IText = {
- X 3,0,JAM1, /* front and back text pens, drawmode and fill byte */
- X 10,1, /* XY origin relative to container TopLeft */
- X NULL, /* font pointer or NULL for default */
- X (UBYTE *)" OK ", /* pointer to text */
- X NULL /* next IntuiText structure */
- X};
- X
- Xstruct Gadget ez_ok_gadget_global = {
- X NULL, /* next gadget */
- X 230,40, /* origin XY of hit box relative to window TopLeft */
- X 74,10, /* hit box width and height */
- X NULL, /* gadget flags */
- X RELVERIFY, /* activation flags */
- X BOOLGADGET, /* gadget type flags */
- X (APTR)&ez_Border2, /* gadget border or image to be rendered */
- X NULL, /* alternate imagery for selection */
- X &ez_IText, /* first IntuiText structure */
- X NULL, /* gadget mutual-exclude long word */
- X NULL, /* SpecialInfo structure */
- X NULL, /* user-definable data */
- X NULL /* pointer to user-definable data */
- X};
- X
- Xstruct IntuiText ez_IText2 = {
- X 3,0,JAM1, /* front and back text pens, drawmode and fill byte */
- X 10,1, /* XY origin relative to container TopLeft */
- X NULL, /* font pointer or NULL for default */
- X (UBYTE *)"Cancel", /* pointer to text */
- X NULL /* next IntuiText structure */
- X};
- X
- Xstruct Gadget ez_cancel_gadget_global = {
- X NULL, /* next gadget - filled in below */
- X 10,40, /* origin XY of hit box relative to window TopLeft */
- X 74,10, /* hit box width and height */
- X NULL, /* gadget flags */
- X RELVERIFY, /* activation flags */
- X BOOLGADGET, /* gadget type flags */
- X (APTR)&ez_Border2, /* gadget border or image to be rendered */
- X NULL, /* alternate imagery for selection */
- X &ez_IText2, /* first IntuiText structure */
- X NULL, /* gadget mutual-exclude long word */
- X NULL, /* SpecialInfo structure */
- X NULL, /* user-definable data */
- X NULL /* pointer to user-definable data */
- X};
- X
- X
- X/* some defines for our gadget id's for this window... */
- X#define CANCEL_GADG 351
- X#define SEARCH_GADG 352
- X#define STRING_GADG 353
- X
- X
- Xchar *getstring(screen, title, def_string)
- X struct Screen *screen;
- X UBYTE *title;
- X char *def_string;
- X{
- X char buff[255], *string = NULL;
- X struct Window *win, *OpenWindow();
- X struct IntuiMessage *msg, *GetMsg();
- X struct Gadget *gadg, string_gadget, search_gadget, cancel_gadget;
- X struct StringInfo string_gadgetSInfo;
- X USHORT len;
- X LONG go_on = TRUE;
- X ULONG idcmp = GADGETUP+CLOSEWINDOW+ACTIVEWINDOW, /* IDCMP flags */
- X flags = WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+ACTIVATE+NOCAREREFRESH+WINDOWACTIVE;
- X
- X if (def_string != NULL)
- X strcpy(buff, def_string);
- X else
- X buff[0] = 0;
- X
- X /* this part uses the structure assignment feature of Manx which I
- X * believe is part of ANSI C, so this should be o.k.
- X */
- X cancel_gadget = ez_cancel_gadget_global;
- X search_gadget = ez_ok_gadget_global;
- X string_gadget = ez_string_gadget_global;
- X
- X string_gadgetSInfo = ez_string_gadget_SInfo;
- X string_gadget.SpecialInfo = (APTR) &string_gadgetSInfo;
- X
- X cancel_gadget.NextGadget = &search_gadget;
- X search_gadget.NextGadget = &string_gadget;
- X
- X cancel_gadget.GadgetID = CANCEL_GADG;
- X search_gadget.GadgetID = SEARCH_GADG;
- X string_gadget.GadgetID = STRING_GADG;
- X string_gadgetSInfo.Buffer = (UBYTE *)buff;
- X
- X win = createwindow(screen, flags, idcmp, 148, 46, 316, 55);
- X if ( win == NULL)
- X { return NULL; }
- X
- X /* put the window title in */
- X SetWindowTitles(win, title, -1L);
- X
- X /* add the gadgets to the window and make them appear */
- X AddGList(win, &cancel_gadget, 1, 3, NULL);
- X RefreshGadgets(&cancel_gadget, win, NULL);
- X
- X while (go_on)
- X {
- X Wait(1L << win->UserPort->mp_SigBit);
- X
- X while( go_on && (msg = GetMsg(win->UserPort)) )
- X {
- X switch(msg->Class)
- X {
- X case GADGETUP : gadg = (struct Gadget *)msg->IAddress;
- X switch( gadg->GadgetID )
- X {
- X case CANCEL_GADG : go_on = FALSE;
- X break;
- X
- X case SEARCH_GADG : /* fall through here... */
- X
- X case STRING_GADG : go_on = FALSE;
- X len = strlen(buff) + 1;
- X if (len == 1) /* empty gadget */
- X break;
- X string = (char *)AllocMem(len, 0L);
- X if (string == NULL)
- X break;
- X strcpy(string, buff);
- X break;
- X
- X default : break;
- X }
- X break;
- X
- X case ACTIVEWINDOW : ActivateGadget(&string_gadget, win, NULL);
- X break;
- X
- X case CLOSEWINDOW : go_on = FALSE;
- X break;
- X
- X default : break;
- X
- X } /* end of switch(msg->Class) */
- X ReplyMsg(msg);
- X
- X } /* end of while(msg....) */
- X
- X } /* end of while (go_on) */
- X
- X CloseWindow(win);
- X
- X return string;
- X}
- X
- END_OF_FILE
- if test 6832 -ne `wc -c <'src/getstring.c'`; then
- echo shar: \"'src/getstring.c'\" unpacked with wrong size!
- fi
- # end of 'src/getstring.c'
- fi
- if test -f 'src/screen.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/screen.c'\"
- else
- echo shar: Extracting \"'src/screen.c'\" \(5063 characters\)
- sed "s/^X//" >'src/screen.c' <<'END_OF_FILE'
- X/* Screen and window functions. Creating and Closing them.
- X * Yes there are several functions in here that aren't documented.
- X * If you think you need them, go right ahead and use 'em. I felt
- X * it would be best to keep everything encapsulated the way it is.
- X *
- X * Dominic Giampaolo.
- X */
- X
- X#include "ezlib.h"
- X
- Xextern struct GfxBase *GfxBase;
- Xextern struct IntuitionBase *IntuitionBase;
- Xextern int openlibs();
- X
- Xvoid *AllocMem();
- Xvoid *AllocRaster();
- X
- Xstruct BitMap *getbitmap();
- X
- X/* this function will open a custom screen for
- X * you. Simply tell it the type (HIRES, LACE, etc) and
- X * the depth. The rest is taken care of.
- X */
- X
- X /* structure will be mostly filled in later */
- X static struct NewScreen ez_DefaultScreen =
- X {
- X 0L, 0L, /* left edge, top edge */
- X 320L, 200L, /* width, height */
- X 1L, /* depth */
- X 0L, 1L, /* detailpen, blockpen */
- X 0L, /* ViewModes, */
- X CUSTOMSCREEN|SCREENQUIET, /* type, */
- X NULL, /* Font, */
- X NULL, /* title, */
- X NULL, NULL /* Gadgets, Bitmap */
- X };
- X
- X
- Xstruct Screen *makescreen(modes, depth)
- X register int modes;
- X register int depth;
- X{
- X struct Screen *OpenScreen(), *temp_ptr;
- X struct NewScreen NewScreen;
- X
- X /* some sanity checking - short and fast */
- X if(GfxBase == NULL || IntuitionBase == NULL)
- X if ( openlibs(GFX | INTUITION) == NULL)
- X return NULL;
- X
- X NewScreen = ez_DefaultScreen; /* copy in the default struct */
- X
- X NewScreen.ViewModes = modes; /* assume modes value is o.k. */
- X
- X if (modes & HIRES)
- X NewScreen.Width = 640;
- X if (modes & LACE)
- X NewScreen.Height = (SHORT)( 2 * GfxBase->NormalDisplayRows );
- X else
- X NewScreen.Height = (SHORT)GfxBase->NormalDisplayRows;
- X
- X /* check depth field to make sure it agrees with resolution type */
- X if (depth > 4 && (modes & HIRES))
- X depth = 4;
- X
- X if (depth <= 0)
- X depth = 1;
- X
- X if (modes & HAM) /* make sure we have ok vals */
- X { depth = 6; NewScreen.Width = 320; }
- X
- X if (modes & EXTRA_HALFBRITE) /* give valid values */
- X { depth = 6; NewScreen.Width = 320; }
- X
- X /* make sure no foolishness here */
- X if (depth > 6)
- X depth = 6;
- X
- X NewScreen.Depth = depth; /* o.k. to do this now */
- X
- X /* now see if we have to allocate bitmap stuff */
- X if (depth > 2) {
- X NewScreen.CustomBitMap = (struct BitMap *)getbitmap( depth, NewScreen.Width, NewScreen.Height );
- X if (NewScreen.CustomBitMap == NULL)
- X return NULL;
- X NewScreen.Type |= CUSTOMBITMAP;
- X }
- X
- X temp_ptr = OpenScreen(&NewScreen);
- X
- X /* we shove the bitmap ptr into the user data field so we can free it
- X * properly later on. READ: don't use the ExtData field of your screen,
- X * or if you do, save it first and then restore it before calling
- X * killscreen()!
- X */
- X
- X if (temp_ptr != NULL && depth > 2)
- X temp_ptr->ExtData = (UBYTE *)NewScreen.CustomBitMap;
- X
- X return temp_ptr;
- X} /* end of makescreen() */
- X
- X
- Xstruct BitMap *getbitmap(depth, width, height)
- X int depth, width, height;
- X{
- X register struct BitMap *bm;
- X
- X if(depth > 8)
- X return NULL;
- X
- X bm = (struct BitMap*)AllocMem(sizeof(struct BitMap), MEMF_CLEAR);
- X if ( bm == NULL)
- X return NULL;
- X
- X InitBitMap(bm, depth, width, height);
- X
- X /* takes care of freeing bitmap struct if it fails */
- X if ( get_rasters(bm, width, height) == NULL)
- X return NULL;
- X
- X return bm;
- X} /* end of getbitmap() */
- X
- X
- X
- X/* Ripoff notice : This code is pretty much straight out of the Transactor
- X * volume 1, issue 3. I modified it somewhat however.
- X * It will nicely allocate all of the required bit plane pointers for your
- X * specified bitmap structure. Return NULL if something screws up.
- X */
- Xget_rasters(bm, width, height)
- X register struct BitMap *bm;
- X int width, height;
- X{
- X register int i;
- X register long size;
- X
- X size = bm->Rows * bm->BytesPerRow;
- X
- X for (i=0; i < bm->Depth; i++)
- X {
- X bm->Planes[i] = (PLANEPTR) AllocRaster( width, height);
- X
- X if (bm->Planes[i] == NULL)
- X {
- X MSG("No mem for BitMap data. Exiting.\n");
- X return free_bitmap(bm, width, height);
- X }
- X
- X BltClear(bm->Planes[i], ((width/8) * height), 1L);
- X }
- X return 1;
- X} /* end of AllocRasters() */
- X
- X
- Xfree_bitmap(bm, width, height)
- X register struct BitMap *bm;
- X int width, height;
- X{
- X register int i;
- X
- X /* if a plane pointer is null, this for loop exits */
- X for (i=0; bm->Planes[i] && i < bm->Depth; i++) {
- X FreeRaster(bm->Planes[i], (LONG)width, (LONG)height);
- X }
- X
- X FreeMem(bm, sizeof(struct BitMap));
- X return NULL;
- X} /* end of FreeRasters() */
- X
- X
- Xkillscreen(screen)
- X register struct Screen *screen;
- X{
- X register struct BitMap *bm = NULL;
- X int width, height;
- X
- X /* just to make sure we aren't getting garbage */
- X if(screen < 100)
- X return;
- X
- X while(screen->FirstWindow != NULL) /* still got windows on this screen */
- X Delay(50L); /* wait a while for the window to go away */
- X
- X
- X if (screen->BitMap.Depth > 2) {
- X bm = (struct BitMap *)screen->ExtData;
- X width = screen->Width; height = screen->Height;
- X }
- X
- X CloseScreen(screen); /* do this first. */
- X
- X if(bm != NULL)
- X free_bitmap(bm, width, height);
- X}
- X
- X
- END_OF_FILE
- if test 5063 -ne `wc -c <'src/screen.c'`; then
- echo shar: \"'src/screen.c'\" unpacked with wrong size!
- fi
- # end of 'src/screen.c'
- fi
- echo shar: End of archive 2 \(of 2\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked both archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
- Mail comments to the moderator at <amiga-request@uunet.uu.net>.
- Post requests for sources, and general discussion to comp.sys.amiga.
-